R语言可视化——REmapH(中心热度图)
今天是REmap系列的最后一篇——REmapH函数。
这个函数的特色是可以做中心辐射的热力图,这种热力图在气象、人口密度、海拔测绘领域有诸多运用,当然也可以上当用在商务场合——特别是跟地理信息有关的数据呈现方面。
library("baidumap")
library("REmap")
?remapH
remapH(data,
maptype = 'china',
theme = get_theme("Dark"),
blurSize = 30,
color = c('blue', 'cyan', 'lime', 'yellow', 'red'),
minAlpha = 0.05,
opacity = 1,
...)
data为要传入的数据,数据为三列,第一列为lon(经度),第二列为lat(维度),第三列为prob(密度/概率);
maptype为要绘制的地图类型,可选有:”china”,”world”或中国各省份名字;
theme为绘制的地图主题类型,可由get_theme函数传入;
blurSize为热力效果的泛化范围,可调整热力点中心的扩散程度;
color为热力的渐变颜色;
minAlpha为热力点的展示阈值,对应data中的prob列,作图时各点密度会对比minAlpha,以凸显不同密度所展示的不同热力分布;
opacity为透明度,调整热力图的透明度。
get_theme(theme = "Dark",
lineColor = "Random",
backgroundColor = "#1b1b1b",
titleColor = "#fff",
borderColor = "rgba(100,149,237,1)",
regionColor = "#1b1b1b",
labelShow = T,
pointShow = F,
pointColor = "gold"
)
theme为主题,设置该参数后无需设置get_theme里其他参数,可选有”Dark”、”Sky”、”blue”和”none”四种
lineColoe为线条颜色,对应为map图里面迁徙线条的颜色
backgroundColor为图片的背景色,支持16进制颜色输入,也支持rgb()函数和rgba()
titleColor为标题的颜色,设置同上
borderColor为地图中各省、市边界颜色
regionColor为地图中各区域颜色,各省份和市
labelShow为是否展示各省、市名字,设置为True时展示
pointShow为是否展示各省会城市所在点,设置为True时展示
pointColor设置上述点的颜色
接下来首先通过两个案例进行讲解:
options(remap.js.web=T)
这里有一个包含经纬度信息及对应密度的数据集,通过该数据集我们可以看到看到REmapH函数制作热力图的大致效果:
data<- read.csv(file="D:\\R\\map\\MoveChart\\cityvaluetop10.csv",header=T)
数据结构如下:
head(data)
lon lat prob
1 114.3948 23.40800 0.85
2 115.3948 24.40800 0.85
3 114.3948 23.40800 0.85
4 113.3948 23.40800 0.85
5 114.7307 27.69586 0.80
6 110.5066 28.69586 0.80
'data.frame': 48 obs. of 3 variables:
$ lon : num 114 115 114 113 115 ...
$ lat : num 23.4 24.4 23.4 23.4 27.7 ...
$ prob: num 0.85 0.85 0.85 0.85 0.8 0.8 0.8 0.8 0.75 0.75 ...
map_out<-remapH(data,
maptype = 'china',
theme =get_theme(theme = "Dark"),
blurSize = 70,
color = "red",
minAlpha = 10,
opacity = 1,
)
plot(map_out)
接下来制作辽宁省省域热力图数据集:
首先使用mapNames函数获取辽宁省市级行政单位:
city_ln<-mapNames("liaoning")
[1] "大连市" "朝阳市" "丹东市" "铁岭市" "沈阳市" "抚顺市" "葫芦岛市" "阜新市" "锦州市"
[10] "鞍山市" "本溪市" "营口市" "辽阳市" "盘锦市"
获取各市级行政单位经纬度信息:
city_list<-get_geo_position(city_ln)
> city_list
lon lat city
1 121.6214 38.91934 大连市
2 120.4573 41.57949 朝阳市
3 124.3626 40.00569 丹东市
4 123.8488 42.29257 铁岭市
5 123.4390 41.81134 沈阳市
6 123.9636 41.88608 抚顺市
7 120.8434 40.71736 葫芦岛市
8 121.6765 42.02798 阜新市
9 121.1336 41.10087 锦州市
10 123.0010 41.11412 鞍山市
11 123.7735 41.29985 本溪市
12 122.2415 40.67256 营口市
13 123.2437 41.27445 辽阳市
14 122.0773 41.12594 盘锦市
生成一列密度数据:
point<-round(runif(14,min=0.3,max=0.95),2)
[1] 0.89 0.82 0.91 0.87 0.90 0.90 0.85 0.89 0.87 0.94 0.90 0.85 0.88 0.88
合成数据框格式的热力图作图数据:
newdata<-data.frame(city_list[,1:2],point)
lon lat point
1 121.6214 38.91934 0.89
2 120.4573 41.57949 0.82
3 124.3626 40.00569 0.91
4 123.8488 42.29257 0.87
5 123.4390 41.81134 0.90
6 123.9636 41.88608 0.90
7 120.8434 40.71736 0.85
8 121.6765 42.02798 0.89
9 121.1336 41.10087 0.87
10 123.0010 41.11412 0.94
11 123.7735 41.29985 0.90
12 122.2415 40.67256 0.85
13 123.2437 41.27445 0.88
14 122.0773 41.12594 0.88
作图函数:
map_out1<-remapH(newdata,
maptype = "辽宁",
theme =get_theme(theme = "Dark"),
blurSize = 70,
color = "red",
minAlpha = 10,
opacity = 1,
)
plot(map_out1)
因为以上数据集中使用的各市中心城市的密度数据,所以整体密度太过分散,看不出渐变效果,当然密度图的数据记录是不受数量限制的,在有较多数据点呈现密集分布的地方,可以看到非常明显的颜色热度渐变效果。
这里我通过添加一列分类数据,将以上密度图数据进行改造:
newdata$perA<-rep("A",14)
newdata$perB<-rep("B",14)
newdata$perC<-rep("C",14)
使用Reshape2包对数据进行一维转化:
mydata <- melt(newdata, id.vars=c("lon","lat","point"))
lon lat point variable value
1 121.6214 38.91934 0.85 perA A
2 120.4573 41.57949 0.81 perA A
3 124.3626 40.00569 0.91 perA A
4 123.8488 42.29257 0.90 perA A
5 123.4390 41.81134 0.91 perA A
6 123.9636 41.88608 0.93 perA A
7 120.8434 40.71736 0.91 perA A
8 121.6765 42.02798 0.87 perA A
9 121.1336 41.10087 0.89 perA A
10 123.0010 41.11412 0.82 perA A
11 123.7735 41.29985 0.88 perA A
12 122.2415 40.67256 0.95 perA A
13 123.2437 41.27445 0.90 perA A
14 122.0773 41.12594 0.84 perA A
15 121.6214 38.91934 0.85 perB B
16 120.4573 41.57949 0.81 perB B
17 124.3626 40.00569 0.91 perB B
18 123.8488 42.29257 0.90 perB B
19 123.4390 41.81134 0.91 perB B
20 123.9636 41.88608 0.93 perB B
21 120.8434 40.71736 0.91 perB B
22 121.6765 42.02798 0.87 perB B
23 121.1336 41.10087 0.89 perB B
24 123.0010 41.11412 0.82 perB B
25 123.7735 41.29985 0.88 perB B
26 122.2415 40.67256 0.95 perB B
27 123.2437 41.27445 0.90 perB B
28 122.0773 41.12594 0.84 perB B
29 121.6214 38.91934 0.85 perC C
30 120.4573 41.57949 0.81 perC C
31 124.3626 40.00569 0.91 perC C
32 123.8488 42.29257 0.90 perC C
33 123.4390 41.81134 0.91 perC C
34 123.9636 41.88608 0.93 perC C
35 120.8434 40.71736 0.91 perC C
36 121.6765 42.02798 0.87 perC C
37 121.1336 41.10087 0.89 perC C
38 123.0010 41.11412 0.82 perC C
39 123.7735 41.29985 0.88 perC C
40 122.2415 40.67256 0.95 perC C
41 123.2437 41.27445 0.90 perC C
42 122.0773 41.12594 0.84 perC C
从新运行图表函数:
map_out2<-remapH(newdata[,1:3],
maptype = "辽宁",
theme =get_theme(theme = "Dark"),
blurSize = 70,
color = "red",
minAlpha = 10,
opacity = 1,
)
plot(map_out2)
魔方学院QQ群:
QQ群:
微信群: